學了前面兩個模組的使用方式,今天就來實戰看看吧!
先來設定目標,選取一個網站後慢慢的加篩選條件,以符合我們的期望.
要取得紅色區塊內未被刪除的文章
透過瀏覽器開發者工具可以找出要撈取的物件屬性.從下圖中我們可以看到要撈取的的是div的class為title是我們要取的目標
from bs4 import BeautifulSoup
import requests
uri = 'https://www.ptt.cc/bbs/Soft_Job/index.html'
html = requests.get(uri)
soup = BeautifulSoup(html.content, 'html.parser')
titles = soup.find_all('div', class_ = 'title', limit = 20) #找出指定的 class class面前20筆為我們要撈取資料
for i, item in enumerate(titles):
if item.find('a'): #過濾掉被刪除的文章
s = item.find('a')
print('#{}標題: {} \n 連結:https://www.ptt.cc{}'.format(i+1, s.string, s.get('href')))
#輸出:
#1標題: [徵才] 徵Senior DevOps Engineer(90K~120K/mont
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540891740.A.FCB.html
#3標題: [請益] offer選擇
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540912049.A.5BB.html
#4標題: Re: [請益] [請益]想問職場經歷和碩士學位的取捨
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540917272.A.3E9.html
#5標題: [徵才] COBINHOOD 徵求前端工程師(72K~120K/mon)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540950761.A.B25.html
#7標題: [請益] 關於#1Rr7HjGy及#1RrPozuS兩篇徵才文
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540975462.A.AA9.html
#8標題: [請益] 沒簽約案子怕拿不到錢
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540983640.A.894.html
#10標題: Re: [請益] [請益]想問職場經歷和碩士學位的取捨
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540987810.A.37D.html
#11標題: Re: [請益] [請益]想問職場經歷和碩士學位的取
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540988400.A.A7F.html
#12標題: [徵才] OneDegree 徵資安主管 (60~100K up/5Y)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541001848.A.6A2.html
#13標題: [請益] 前端工程師需要會ps嗎?
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541039554.A.B34.html
#14標題: [請益] 轉職請益
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541044575.A.E80.html
#15標題: [請益] 新創公司門檻
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541048044.A.A99.html
#16標題: [徵才] 百睿達有限公司 誠徵後端工程師
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541049353.A.4C1.html
#17標題: [徵才] 留學顧問公司徵前端工程師(台北)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541051202.A.EA2.html
#18標題: [徵才] H&L 代徵 Software Engineer (70K~120K+)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063366.A.BDC.html
#19標題: [徵才] H&L 代徵 DevOps Engineer (80K~120K+)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063561.A.E88.html
#20標題: Fw: [徵才] 思華科技-DBA資料庫技術工程師
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541067017.A.5FD.html
以上就可以撈出第一頁的資料,但我們可能需要按照類別進行分類所以可以將程式修改為:
titles = soup.find_all('div', class_ = 'title', limit = 20) #找出指定的 class class面前20筆為我們要撈取資料
category = '[' + input('請輸入要搜尋的類別:') + ']'
i = 0
for item in titles:
if item.find('a'): #過濾掉被刪除的文章
s = item.find('a')
title_text = s.string
if title_text.startswith(category) :
i = i+1
print('#{}標題: {} \n #連結:https://www.ptt.cc{}'.format(i, title_text, s.get('href')))
#輸入:徵才
#輸出:
#1標題: [徵才] 徵Senior DevOps Engineer(90K~120K/mont
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540891740.A.FCB.html
#2標題: [徵才] COBINHOOD 徵求前端工程師(72K~120K/mon)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540950761.A.B25.html
#3標題: [徵才] OneDegree 徵資安主管 (60~100K up/5Y)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541001848.A.6A2.html
#4標題: [徵才] 百睿達有限公司 誠徵後端工程師
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541049353.A.4C1.html
#5標題: [徵才] 留學顧問公司徵前端工程師(台北)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541051202.A.EA2.html
#6標題: [徵才] H&L 代徵 Software Engineer (70K~120K+)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063366.A.BDC.html
#7標題: [徵才] H&L 代徵 DevOps Engineer (80K~120K+)
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063561.A.E88.html
若想包含更多資料可以再去觀察其他資訊的tag以便爬取, 舉例來說我們可以再增加發文日期,程式如下:
r_ent_div = soup.find_all('div', class_ = 'r-ent', limit = 20) #找出指定的 class class面前20筆為我們要撈取資料
category = '[' + input('請輸入要搜尋的類別:') + ']'
i = 0
for item in r_ent_div:
title = item.find( class_ = 'title')
if title.find('a'): #過濾掉被刪除的文章
s = title.find('a')
title_text = s.string
date = item.find('div', class_ = 'date')
if title_text.startswith(category) :
i = i+1
print('#{}標題: {} 發文日期: {} \n #連結:https://www.ptt.cc{}'.format(i, title_text, date.string, s.get('href')))
#輸入:徵才
#輸出:
#1標題: [徵才] 徵Senior DevOps Engineer(90K~120K/mont 發文日期: 10/30
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540891740.A.FCB.html
#2標題: [徵才] COBINHOOD 徵求前端工程師(72K~120K/mon) 發文日期: 10/31
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1540950761.A.B25.html
#3標題: [徵才] OneDegree 徵資安主管 (60~100K up/5Y) 發文日期: 11/01
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541001848.A.6A2.html
#4標題: [徵才] 百睿達有限公司 誠徵後端工程師 發文日期: 11/01
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541049353.A.4C1.html
#5標題: [徵才] 留學顧問公司徵前端工程師(台北) 發文日期: 11/01
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541051202.A.EA2.html
#6標題: [徵才] H&L 代徵 Software Engineer (70K~120K+) 發文日期: 11/01
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063366.A.BDC.html
#7標題: [徵才] H&L 代徵 DevOps Engineer (80K~120K+) 發文日期: 11/01
#連結:https://www.ptt.cc/bbs/Soft_Job/M.1541063561.A.E88.html
下篇文章我們再來嘗試如何抓取多頁.
文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!